Брокер сообщений — посредник асинхронного взаимодействия (pub/sub, очереди), который буферизует и доставляет сообщения между сервисами.

Когда использовать

  • Декуплинг продюсеров и консьюмеров, сглаживание пиков нагрузки.

  • Фан-аут/фан-ин, ретраи без блокировки основного потока.

  • Event-driven интеграции и интеграция с устаревшими системами.

Ключевые элементы

  • Топики/очереди, разделы/партиции, группы потребителей.

  • Продюсеры/консьюмеры, ack/nack, ретраи, DLQ.

  • Схемы сообщений (JSON/Avro/Protobuf), ключи для партиционирования/идемпотентности.

Гарантии и паттерны

  • Доставка: at-most-once / at-least-once / effectively-once (за счёт идемпотентности).

  • Паттерны: outbox + дедупликация, idempotency key, отложенная доставка, backoff, rebalancing.

  • Порядок: ключи партиции, упорядочивание внутри ключа, компенсации при нарушении порядка.

Выбор и сравнение

  • Kafka — высокая пропускная способность, хранение логов, управление порядком по ключу, pull-модель.

  • RabbitMQ — маршрутизация по exchange/queue, богаче паттерны очередей, удобен для RPC/управляемых ретраев.

  • NATS — лёгкий брокер для low-latency, request/reply и streaming.

Артефакты

  • Спецификация топиков/очередей: схема, ключи, TTL/DLQ, лимиты.

  • Соглашения о ретраях/таймаутах, SLA на доставку, мониторинг лагов.

  • Тесты совместимости продюсер/консьюмер: контракты, фикстуры сообщений.

Когда не использовать

  • Когда нужен строгий глобальный порядок или транзакции между несколькими ресурсами без дополнительных паттернов.

  • Когда нагрузка мала и добавление брокера усложнит эксплуатацию без ценности.

Эксплуатация и мониторинг

  • Метрики: лаги потребителей, доля retry/DLQ, размер очередей, время в пути сообщения.

  • Оповещения: рост лагов, превышение ретраев, отставание от SLA доставки.

  • Процедуры: политика retention, очистка DLQ, бэкапы/восстановление конфигураций.

Контракт сообщений

  • Схема с версиями и правилами совместимости (Avro/Protobuf/JSON Schema).

  • Поля для идемпотентности/корреляции: idempotency key, trace id, источники события.

  • Примеры сообщений и негативные кейсы (битые схемы, неизвестные поля) для контракт-тестов.

Темы

Kafka

RabbitMQ

NATS

Последнее обновление